home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / share / perl5 / auto / RPC / XML / Procedure / add_signature.al next >
Encoding:
Text File  |  2008-11-04  |  1.7 KB  |  54 lines

  1. # NOTE: Derived from blib/lib/RPC/XML/Procedure.pm.
  2. # Changes made here will be lost when autosplit is run again.
  3. # See AutoSplit.pm.
  4. package RPC::XML::Procedure;
  5.  
  6. #line 659 "blib/lib/RPC/XML/Procedure.pm (autosplit into blib/lib/auto/RPC/XML/Procedure/add_signature.al)"
  7. ###############################################################################
  8. #
  9. #   Sub Name:       add_signature
  10. #                   delete_signature
  11. #
  12. #   Description:    This pair of functions may be used to add and remove
  13. #                   signatures from a method-object.
  14. #
  15. #   Arguments:      NAME      IN/OUT  TYPE      DESCRIPTION
  16. #                   $self     in      ref       Object of this class
  17. #                   @args     in      list      One or more signatures
  18. #
  19. #   Returns:        Success:    $self
  20. #                   Failure:    error string
  21. #
  22. ###############################################################################
  23. sub add_signature
  24. {
  25.     my $self = shift;
  26.     my @args = @_;
  27.  
  28.     my (%sigs, $one_sig, $tmp, $old);
  29.  
  30.     # Preserve the original in case adding the new one causes a problem
  31.     $old = $self->{signature};
  32.     %sigs = map { $_ => 1 } @{$self->{signature}};
  33.     for $one_sig (@args)
  34.     {
  35.         $tmp = (ref $one_sig) ? join(' ', @$one_sig) : $one_sig;
  36.         $sigs{$tmp} = 1;
  37.     }
  38.     $self->{signature} = [ keys %sigs ];
  39.     unless (ref($tmp = $self->make_sig_table))
  40.     {
  41.         # Because this failed, we have to restore the old table and return
  42.         # an error
  43.         $self->{signature} = $old;
  44.         $self->make_sig_table;
  45.         return ref($self) . '::add_signature: Error re-hashing table: ' .
  46.             $tmp;
  47.     }
  48.  
  49.     $self;
  50. }
  51.  
  52. # end of RPC::XML::Procedure::add_signature
  53. 1;
  54.